(define (problem ptool) 
  (:domain tropos-domain) 
  (:objects     
    foo - t_gtype
    A1 A2 A3 A4 A5 A6 A7 A8 A9  - t_actor
    G0 G1 G2 G3 G4 G5 G6 G7 G8 G9 G10 G11 G12 G13 G14 G15 G16 G17 G18 G19 G20 G21 G22 G23 G24 G25 G26 G27 G28 G29 G30 G31 G32 G33 - t_goal
  ) 
  (:goal (and 
  	  
   	  (satisfied G0)
  	  
  )) 
  (:init 
	 (= (satisfaction_coeff) 1)
	 (= (work_load_coeff) 1)
	 ;--------------------------------	 	  
	 (requests A1 G0)  
	  ;-----------------------------    
        
	 ;(and_subgoal2 G0 G1 G2)     
	 ;(or_subgoal2 G0 G3 G4)       
	 (and_subgoal2 G6 G1 G5)
	 (is_means_end G6 G0)
	 ;------------------------------
           
     (can_provide A2 G1)	 
     (can_provide A3 G1)
     (can_provide A4 G1)              

	 (can_provide A2 G2)	 
     (can_provide A3 G2)
     (can_provide A4 G2)  
     (can_provide A5 G2)   
     
	 (can_provide A2 G3)	 
     (can_provide A3 G3)

	 (can_provide A4 G4)
	 (can_provide A5 G4)   

	 (can_provide A5 G5) 
	 (can_provide A6 G5) 
	 (can_provide A7 G5) 
	 ;--------------------------------

	 (= (max_work_load A1) 500) ; maximum workload of an actor, unit = cost
	 (= (max_work_load A2) 500)
	 (= (max_work_load A3) 500)	 
	 (= (max_work_load A4) 500)
	 (= (max_work_load A5) 500)
	 (= (max_work_load A6) 500)
	(= (max_work_load A7) 500)
	
	 ;--------------------------------

 	 (= (max_job_at_hand A1) 5) ; maximum goal/job an actor can do at a moment, unit = goal/job
	 (= (max_job_at_hand A2) 5)
	 (= (max_job_at_hand A3) 5)
	 (= (max_job_at_hand A4) 5)
	 (= (max_job_at_hand A5) 7)
	 (= (max_job_at_hand A6) 7)
	(= (max_job_at_hand A7) 7)
	 ;-------------------------------

     ;(= (expected_satisfaction_degree G1)  100)
	 ;----------------------------------
	; only if actor can provide goal (most of them will be leaf goal), unit = degree
	 ;100 = excellent, 75 = good, 50 = average, 25 = low, 0 = not provide
	(= (satisfaction_ability A2 G1) 100)
    (= (satisfaction_ability A3 G1) 75)
	(= (satisfaction_ability A4 G1) 50)

	(= (satisfaction_ability A2 G2) 25)
	(= (satisfaction_ability A3 G2) 50)
	(= (satisfaction_ability A4 G2) 75)
	(= (satisfaction_ability A5 G2) 100)

	(= (satisfaction_ability A2 G3) 50)
    (= (satisfaction_ability A3 G3) 50) ;100

	(= (satisfaction_ability A4 G4) 50)
	(= (satisfaction_ability A5 G4) 25)

	(= (satisfaction_ability A5 G5) 100)
	(= (satisfaction_ability A6 G5) 100)
	(= (satisfaction_ability A7 G5) 100)
	
	 ;----------------------------------	 
	;only if actor can provide goal, cost that actor spend to do goal, unit = cost
	 ;100 = innocent ; 75 = has some knowledge; 50 = has good knowledge/trained; 25 = well-trained
	 (= (work_effort A2 G1) 25)
	 (= (work_effort A3 G1) 50)
	 (= (work_effort A4 G1) 75)

	 (= (work_effort A2 G2) 100)
	 (= (work_effort A3 G2) 75)
	 (= (work_effort A4 G2) 50)
	 (= (work_effort A5 G2) 25)

	 (= (work_effort A2 G3) 75)
	 (= (work_effort A3 G3) 25)

	 (= (work_effort A4 G4) 75)
	 (= (work_effort A5 G4) 100)

	 (= (work_effort A5 G5) 25)
	 (= (work_effort A6 G5) 25)
	  (= (work_effort A7 G5) 25)
	 ;------------------------------
	 ;(= (min_satisfaction_degree G1) 50)
	 (= (max_satisfaction_degree G1) 150)

	 ;(= (min_satisfaction_degree G2) 50)
	 (= (max_satisfaction_degree G2) 100)

	 (= (max_satisfaction_degree G3) 150)

	 (= (max_satisfaction_degree G4) 75)

	 (= (max_satisfaction_degree G5) 300)


  )
  ;(:metric maximize (- (* (satisfaction_coeff) (rt_total_satisfaction_degree)) (* (work_load_coeff) (rt_total_work_load))))
  ;(:metric maximize (/ (rt_total_satisfaction_degree) (+ (rt_total_work_load) 0.0001)))
  (:metric maximize (rt_plan_quality))
)
